﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public delegate void CursoSelected(Periodos Periodo);
public delegate void Clear();
public partial class Controles_CursoSeleccion : System.Web.UI.UserControl
{
    private TipoSeleccion _tipoSeleccion= TipoSeleccion.Periodos;

    public event CursoSelected seleciona;
    public event Clear clear;

    #region Propiedades
    public TipoSeleccion tipo
    {
        get { return _tipoSeleccion; }
        set { _tipoSeleccion = value; }
    }

    public string Curso
    {
        get { return cboCursos.Value; } 
    }
    #endregion

    protected void Page_Load(object sender, EventArgs e)
    {
            
        CboProfesor.seleciona += new cboSelected(CboProfesor_seleciona);
        cboMaterias.seleciona += new cboSelected(cboMaterias_seleciona);
        cboCursos.seleciona += new cboSelected(cboCursos_seleciona);
        cboCursos.NameId = "IdCurso";
        cboCursos.NameDescript = "CursoDescrip";
        CboPeriodo.seleciona += new cboSelected(CboPeriodo_seleciona);
        CboParticion.seleciona += new cboSelected(CboParticion_seleciona);
        cboSede.seleciona += new cboSelected(cboSede_seleciona);

        //HideRowsfrom(1);

        //Controlar lo actual seleccionado
        if (!IsPostBack)
        {
            SeleccionActual();
            CboParticion_seleciona("1", "2");
        }

    }

    private void SeleccionActual()
    {
        cboSede.tabla = "proc_sedes";
        cboSede.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
        cboSede.BindCBO();

        CboProfesor.BindCBO();
        biFactory.IdSede = biFactory.User().IdSede;
        cboMaterias.Value = biFactory.IdMateria.ToString();
        if ( biFactory.User().IdProfesor > 0)
        {
            CboProfesor.Value = biFactory.User().IdProfesor.ToString();
            if (biFactory.User().IdPerfil > 1)
                CboProfesor.Enabled = false;

            HideRowsfrom(3);
            CboProfesor_seleciona("1", "1");
        }

        if (biFactory.User().IdSede > 0)
        {
            cboSede.Value = biFactory.User().IdSede.ToString();
            if (biFactory.User().IdPerfil > 0)
                cboSede.Enabled = false;
        }

        if (biFactory.IdSede > 0)
        {
            cboSede.Value = biFactory.IdSede.ToString();
        }

    }

    private void HideRowsfrom(int desde)
    {
        for (int i = 0; i < desde; i++)
        {
            tbSeleccion.Rows[i].Style["display"] = "";
        }

        for (int i = desde; i < tbSeleccion.Rows.Count; i++)
        {
            tbSeleccion.Rows[i].Style["display"] = "none";
        }
    }

#region Periodos eventos
    void CboProfesor_seleciona(string param1, string param2)
    {

        if (clear != null)
        {
            clear.Invoke();
        }
        //obtener las sedes del profesor
        cboSede.SourceData = "dbo.sp_GetSedesFromProfesor " + CboProfesor.Value;
        cboSede.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
        cboSede.AutoSelect = true;
        cboSede.BindCBO();

        if( CboProfesor.Value!="")
            biFactory.Profesor(Profesor.Buscar("idProfesor = " + CboProfesor.Value));

        cboMaterias.tabla = "dbo.sp_ProfesorMateria " + CboProfesor.Value;
        cboMaterias.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
        cboMaterias.NameId = "idMateria";
        cboMaterias.NameDescript = "Materia";
        cboMaterias.BindCBO();
        cboMaterias.Visible = true;
        HideRowsfrom(3);
        if (biFactory.Materia().IdMateria > 0)
        {
            cboMaterias.Value = biFactory.Materia().IdMateria.ToString();
            cboMaterias_seleciona("1", "2");
        }
 
        
    }
    void cboSede_seleciona(string param1, string param2)
    {
        biFactory.IdSede = cboSede.ValueInt;
        //refiltrar las materias en funcion de la sede
        cboMaterias.tabla = "dbo.sp_ProfesorMateria " + CboProfesor.Value + " , " + cboSede.Value;
        cboMaterias.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
        cboMaterias.NameId = "idMateria";
        cboMaterias.NameDescript = "Materia";
        cboMaterias.BindCBO();
        cboMaterias.Visible = true;
        if (biFactory.IdMateria != 0)
        {
            cboMaterias.Value = biFactory.IdMateria.ToString();
            cboMaterias_seleciona("1", "1");
        }

        HideRowsfrom(3);
    }
    void cboMaterias_seleciona(string param1, string param2)
    {
        biFactory.IdMateria = cboMaterias.ValueInt;
        cboCursos.tabla = "proc_cursosDisponibleProfesorMateria " + CboProfesor.Value + "," + cboMaterias.Value;
        cboCursos.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
        cboCursos.AutoSelect = true;
        cboCursos.BindCBO();

        biFactory.CursoDes = cboCursos.Text;
        //cargar el periodo segun la planilla
        
        
            CboPeriodo.SourceData = "Proc_periodosDisponibles " + biFactory.Materia().idTipoPlanilla.ToString();
        
        
        
        CboPeriodo.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
        CboPeriodo.NameId = "Id";
        CboPeriodo.NameDescript = "Detalle";
        CboPeriodo.BindCBO();
        HideRowsfrom(5);
        if (biFactory.IdCurso > 0)
        {
            cboCursos.Value = biFactory.IdCurso.ToString();
            cboCursos_seleciona("1", "2");

        }
        else
        {
            if (cboCursos.Count == 1 && cboCursos.ValueInt != -1)
            {
                cboCursos_seleciona("1", "2");
            }
        }
        
    }
    void cboCursos_seleciona(string param1, string param2)
    {
        biFactory.IdCurso = cboCursos.ValueInt;
        biFactory.CursoDes = param2;

        ViewPeriodosEnabled();


        if (biFactory.IdCurso  ==-1)
        {
            biFactory.Per.NroPeriodo = -1;
            HideRowsfrom(3);
        }

        if (_tipoSeleccion != TipoSeleccion.Concepto)
        {
            #region  Carga de periodos
            //cargar el periodo segun la planilla
            CboPeriodo.SourceData = "Proc_periodosDisponibles " + biFactory.Materia().idTipoPlanilla.ToString() + ",0";
            CboPeriodo.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
            CboPeriodo.NameId = "Id";
            CboPeriodo.NameDescript = "Detalle";
            CboPeriodo.AutoSelect = true;
            CboPeriodo.BindCBO();
            if (biFactory.Per.NroPeriodo > 0)
            {
                HideRowsfrom(7);
                CboPeriodo.Value = biFactory.Per.NroPeriodo.ToString();
                CboPeriodo_seleciona("1", "2");
            }
            else
            {
                HideRowsfrom(5);
                if (CboPeriodo.Count == 1 && CboPeriodo.ValueInt > 0)
                {
                    CboPeriodo_seleciona("1", "2");
                }

            }
            #endregion
        }
        else
        {
            HideRowsfrom(3);
            if (seleciona != null )
            { // El evento se lanza como cualquier delegado
                //lblCaption.Text = ddlCBO.SelectedValue;
                seleciona.Invoke(null);
            }
        }
        
    }
    void CboPeriodo_seleciona(string param1, string param2)
    {
        switch(_tipoSeleccion)
        {
            case TipoSeleccion.Periodos:
                CboParticion.tabla = "Proc_ParticionFromPeriodo " + CboPeriodo.Value + " ," + biFactory.Materia().idTipoPlanilla.ToString();
                break;
            case TipoSeleccion.Cuatrimestrales:
                CboParticion.tabla = "Proc_ParticionFromPeriodo " + CboPeriodo.Value + " ," + biFactory.Materia().idTipoPlanilla.ToString() + ",1";
                break;
            case TipoSeleccion.Concepto:
                CboParticion.tabla = "Proc_ParticionFromPeriodo " + CboPeriodo.Value + " ," + biFactory.Materia().idTipoPlanilla.ToString() + ",1";
                break;
        }

        CboParticion.TipoOrigen = Controles_cboGeneric.TipoSource.Procedure;
        CboParticion.NameId = "Id";
        CboParticion.NameDescript = "Detalle";
        CboParticion.AutoSelect = true;
        CboParticion.BindCBO();
        //    trQuincena.Style["display"] = "";
        HideRowsfrom(7);
        if (biFactory.Per.OrdenPeriodo > 0)
        {
            CboParticion.Value = biFactory.Per.OrdenPeriodo.ToString();

        }
        if (CboParticion.Count == 1)
        {
            CboParticion_seleciona("1", "2");
        }

    }
    void CboParticion_seleciona(string param1, string param2)
    {
        if (CboPeriodo.Value != "" && cboSede.Value != "" && CboParticion.Value != "")
        {
            Periodos oPer = biFactory.GetIdPeriodo(biFactory.Per.Anio.ToString(), cboSede.Value, CboPeriodo.Value, CboParticion.Value);
        
        HideRowsfrom(7);
        if (seleciona != null && oPer != null)
        { // El evento se lanza como cualquier delegado
            //lblCaption.Text = ddlCBO.SelectedValue;
            seleciona.Invoke(oPer);
        }
    }
    }
#endregion

    private void ViewPeriodosEnabled()
    {
        lblPeridos.Text = "";
        DataTable dt = Periodos.Tabla("Proc_getPerdiodoHabilitado " + biFactory.Materia().idTipoPlanilla.ToString());
        if (dt.Rows.Count > 0)
        {
            lblPeridos.Text += "<table border='0'><tr><td style='border:solid 0px #fff'>";
            if (dt.Rows.Count > 1)
            {
                lblPeridos.Text += "<b>Periodos Habilitados:</b>";
            }
            else
            {
                lblPeridos.Text += "<b>Periodo Habilitado:</b>";
            }
            lblPeridos.Text += "</td></tr>";

            foreach (DataRow r in dt.Rows)
            {
                lblPeridos.Text += "<tr>";
                for (int c = 0; c < dt.Columns.Count; c++)
                {
                    lblPeridos.Text += "<td style='border:solid 0px #fff'>";
                    lblPeridos.Text += "  <b>" + dt.Columns[c].ToString() + "</b>  " + r[c].ToString();
                    lblPeridos.Text += "</td>";
                }
                lblPeridos.Text += "</tr>";
            }
            lblPeridos.Text += "</table>";
        }
        else
        {
            lblPeridos.Text = "No Existen periodos Habilitados";
        }
    }


    protected void CboParticion_Load(object sender, EventArgs e)
    {

    }
}

public enum TipoSeleccion{
    Periodos,
    Cuatrimestrales,
    Concepto
}